#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <string.h>

int main() {
    printf("简易命令执行器 (输入'exit'退出)\n");
    
    char command[100];
    
    while (1) {
        printf("请输入要执行的命令: ");
        fgets(command, sizeof(command), stdin);
        
        // 移除换行符
        size_t len = strlen(command);
        if (len > 0 && command[len-1] == '\n') {
            command[len-1] = '\0';
        }
        
        // 检查退出条件
        if (strcmp(command, "exit") == 0) {
            printf("程序退出\n");
            break;
        }
        
        // 创建子进程
        pid_t pid = fork();
        
        if (pid < 0) {
            // fork失败
            perror("fork失败");
            exit(1);
        } 
        else if (pid == 0) {
            // 子进程
            printf("子进程 (PID: %d) 执行命令: %s\n", getpid(), command);
            
            // 使用exec执行命令
            execlp("/bin/sh", "sh", "-c", command, NULL);
            
            // 如果exec执行失败，会继续执行这里的代码
            perror("exec失败");
            exit(1);
        } 
        else {
            // 父进程
            printf("父进程 (PID: %d) 等待子进程 (PID: %d) 完成\n", getpid(), pid);
            
            int status;
            waitpid(pid, &status, 0);
            
            if (WIFEXITED(status)) {
                printf("子进程已完成，退出状态: %d\n", WEXITSTATUS(status));
            } else {
                printf("子进程异常终止\n");
            }
        }
    }
    
    return 0;
}